{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import io\n",
    "import os\n",
    "import platform\n",
    "import pdb\n",
    "\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from matplotlib.pyplot import cm\n",
    "\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.optim as optim\n",
    "from sklearn import preprocessing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "data=pd.read_csv('chengdu.csv')\n",
    "dataset=data.iloc[:,-1]\n",
    "dataset.replace(9999,np.nan,inplace=True)\n",
    "dataset.replace(-999,np.nan,inplace=True)\n",
    "for i in range(len(data)):\n",
    "    if np.isnan(dataset.iat[i]):\n",
    "        if i==0:\n",
    "            dataset.iloc[i]=dataset.iat[i+1]\n",
    "        elif i==len(data)-1:\n",
    "            dataset.iloc[i]=dataset.iat[i-1]\n",
    "        else:\n",
    "            dataset.iloc[i]=np.nanmean([dataset.iat[i-1],dataset.iat[i+1]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "pandas.core.series.Series"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(dataset)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "scaler = preprocessing.MinMaxScaler() \n",
    "scaled_values = scaler.fit_transform(pd.DataFrame(dataset))\n",
    "# dataset.iloc[:] = np.squeeze(scaled_values)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_set=np.asarray(dataset,dtype=np.float32)\n",
    "seq_len=30 + 1\n",
    "x=len(data_set)-seq_len\n",
    "sequences = [data_set[t:t+seq_len] for t in range(x)]\n",
    "for i in range(len(sequences)):\n",
    "    sequences[i]=scaler.fit_transform(sequences[i].reshape(-1,1))\n",
    "seq=torch.FloatTensor(sequences)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "split_row=round(0.90*seq.size(0))\n",
    "x_train_set=seq[:split_row, :-1]\n",
    "y_train_set=seq[:split_row, -1]\n",
    "x_valid_set=seq[split_row:, :-1]\n",
    "y_valid_set=seq[split_row:, -1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "class LSTM(nn.Module):\n",
    "    def __init__(self,input_size,hidden_size,num_layers=2,dropout=0,bidirectional=False):\n",
    "        super(LSTM,self).__init__()\n",
    "        self.input_size=input_size\n",
    "        self.hidden_size=hidden_size\n",
    "        self.num_layers=num_layers\n",
    "        self.dropout=dropout\n",
    "        self.bidirectional=bidirectional\n",
    "        self.lstm = nn.LSTM(input_size,\n",
    "                            hidden_size,\n",
    "                            num_layers,\n",
    "                            dropout=dropout,\n",
    "                            bidirectional=bidirectional)\n",
    "        self.linear = nn.Linear(hidden_size, input_size)\n",
    "        \n",
    "    def forward(self,inputs,hidden):\n",
    "        outputs,hidden=self.lstm(inputs,hidden)\n",
    "        predictions=self.linear(outputs[-1])\n",
    "        return predictions,outputs,hidden\n",
    "    \n",
    "    def init_hidden(self,batch_size):\n",
    "        num_directions=2 if self.bidirectional else 1\n",
    "        hidden = (torch.zeros(self.num_layers*num_directions, batch_size, self.hidden_size),\n",
    "                  torch.zeros(self.num_layers*num_directions, batch_size, self.hidden_size))\n",
    "        return hidden"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_batch(x,y,i,batch_size):\n",
    "    if x.dim() == 2:\n",
    "        x = x.unsqueeze(2)\n",
    "    batch_x = x[(i*batch_size):(i*batch_size)+batch_size, :, :]\n",
    "    batch_y = y[(i*batch_size):(i*batch_size)+batch_size]\n",
    "\n",
    "    # Reshape Tensors into (seq_len, batch_size, input_size) format for the LSTM.\n",
    "    batch_x = batch_x.transpose(0, 1)\n",
    "    \n",
    "    return batch_x, batch_y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "def train(model,x_train_set,y_train_set,optimizer,batch_size,epoch):\n",
    "    num_sequences=x_train_set.size(0)\n",
    "    num_batches=num_sequences//batch_size\n",
    "    \n",
    "    total_loss=0\n",
    "    \n",
    "    model.train()\n",
    "    for i in range(num_batches):\n",
    "        # Get input and target batches and reshape for LSTM.\n",
    "        batch_x, batch_y = get_batch(x_train_set, y_train_set, i, batch_size)\n",
    "\n",
    "        # Reset the gradient.\n",
    "        lstm.zero_grad()\n",
    "        \n",
    "        # Initialize the hidden states (see the function lstm.init_hidden(batch_size)).\n",
    "        hidden = lstm.init_hidden(batch_size)\n",
    "        \n",
    "        # Complete a forward pass.\n",
    "        y_pred, outputs, hidden = lstm(batch_x,hidden)\n",
    "        \n",
    "        # Calculate the loss with the 'loss_fn'.\n",
    "        loss = loss_fn(y_pred,batch_y)\n",
    "        \n",
    "        # Compute the gradient.\n",
    "        loss.backward()\n",
    "        \n",
    "        # Clip to the gradient to avoid exploding gradient.\n",
    "        nn.utils.clip_grad_norm_(lstm.parameters(), max_grad_norm)\n",
    "\n",
    "        # Make one step with optimizer.\n",
    "        optimizer.step()\n",
    "        \n",
    "        # Accumulate the total loss.\n",
    "        total_loss += loss.data\n",
    "        \n",
    "    print(\"Epoch {}: Loss = {:.8f}\".format(epoch+1, total_loss/num_batches))\n",
    "    return total_loss/num_batches"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "def eval(model,x_valid_set,y_valid_set,optimizer,batch_size):\n",
    "    num_sequences=x_valid_set.size(0)\n",
    "    num_batches=num_sequences//batch_size\n",
    "    \n",
    "    total_loss=0\n",
    "    \n",
    "    model.eval()\n",
    "    for i in range(num_batches):\n",
    "        # Get input and target batches and reshape for LSTM.\n",
    "        batch_x, batch_y = get_batch(x_valid_set, y_valid_set, i, batch_size)\n",
    "\n",
    "        # Reset the gradient.\n",
    "        lstm.zero_grad()\n",
    "        \n",
    "        # Initialize the hidden states (see the function lstm.init_hidden(batch_size)).\n",
    "        hidden = lstm.init_hidden(batch_size)\n",
    "        \n",
    "        # Complete a forward pass.\n",
    "        y_pred, outputs, hidden = lstm(batch_x,hidden)\n",
    "        \n",
    "        # Calculate the loss with the 'loss_fn'.\n",
    "        loss = loss_fn(y_pred,batch_y)\n",
    "        \n",
    "        # Compute the gradient.\n",
    "        loss.backward()\n",
    "        \n",
    "        # Clip to the gradient to avoid exploding gradient.\n",
    "        nn.utils.clip_grad_norm_(lstm.parameters(), max_grad_norm)\n",
    "\n",
    "        # Make one step with optimizer.\n",
    "        optimizer.step()\n",
    "        \n",
    "        # Accumulate the total loss.\n",
    "        total_loss += loss.data\n",
    "\n",
    "    print(\"Validation: Loss = {:.8f}\".format(total_loss/num_batches))\n",
    "    return total_loss/num_batches"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "def save_model(epoch, model, path='./'):\n",
    "    \n",
    "    # file name and path \n",
    "    filename = path + 'chengdu.pt'\n",
    "    \n",
    "    # load the model parameters \n",
    "    torch.save(model.state_dict(), filename)\n",
    "    \n",
    "    \n",
    "    return model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training model for 30 epoch\n",
      "Epoch 1: Loss = 0.12640682\n",
      "Validation: Loss = 0.08078956\n",
      "Epoch 2: Loss = 0.06975585\n",
      "Validation: Loss = 0.05627270\n",
      "Epoch 3: Loss = 0.04925575\n",
      "Validation: Loss = 0.04160057\n",
      "Epoch 4: Loss = 0.03984251\n",
      "Validation: Loss = 0.03531035\n",
      "Epoch 5: Loss = 0.03445406\n",
      "Validation: Loss = 0.03215132\n",
      "Epoch 6: Loss = 0.03174953\n",
      "Validation: Loss = 0.03051844\n",
      "Epoch 7: Loss = 0.03062422\n",
      "Validation: Loss = 0.02980250\n",
      "Epoch 8: Loss = 0.03026147\n",
      "Validation: Loss = 0.02953873\n",
      "Epoch 9: Loss = 0.03013874\n",
      "Validation: Loss = 0.02942768\n",
      "Epoch 10: Loss = 0.03007352\n",
      "Validation: Loss = 0.02936434\n",
      "Epoch 11: Loss = 0.03002533\n",
      "Validation: Loss = 0.02931903\n",
      "Epoch 12: Loss = 0.02998507\n",
      "Validation: Loss = 0.02928270\n",
      "Epoch 13: Loss = 0.02994990\n",
      "Validation: Loss = 0.02925204\n",
      "Epoch 14: Loss = 0.02991857\n",
      "Validation: Loss = 0.02922550\n",
      "Epoch 15: Loss = 0.02989013\n",
      "Validation: Loss = 0.02920206\n",
      "Epoch 16: Loss = 0.02986394\n",
      "Validation: Loss = 0.02918111\n",
      "Epoch 17: Loss = 0.02983951\n",
      "Validation: Loss = 0.02916215\n",
      "Epoch 18: Loss = 0.02981658\n",
      "Validation: Loss = 0.02914484\n",
      "Epoch 19: Loss = 0.02979478\n",
      "Validation: Loss = 0.02912883\n",
      "Epoch 20: Loss = 0.02977402\n",
      "Validation: Loss = 0.02911384\n",
      "Epoch 21: Loss = 0.02975406\n",
      "Validation: Loss = 0.02909960\n",
      "Epoch 22: Loss = 0.02973481\n",
      "Validation: Loss = 0.02908590\n",
      "Epoch 23: Loss = 0.02971621\n",
      "Validation: Loss = 0.02907259\n",
      "Epoch 24: Loss = 0.02969811\n",
      "Validation: Loss = 0.02905948\n",
      "Epoch 25: Loss = 0.02968050\n",
      "Validation: Loss = 0.02904648\n",
      "Epoch 26: Loss = 0.02966325\n",
      "Validation: Loss = 0.02903349\n",
      "Epoch 27: Loss = 0.02964639\n",
      "Validation: Loss = 0.02902044\n",
      "Epoch 28: Loss = 0.02962980\n",
      "Validation: Loss = 0.02900730\n",
      "Epoch 29: Loss = 0.02961342\n",
      "Validation: Loss = 0.02899400\n",
      "Epoch 30: Loss = 0.02959725\n",
      "Validation: Loss = 0.02898055\n",
      "\n",
      "\n",
      "\n",
      "Optimization ended.\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "input_size=1\n",
    "hidden_size=24\n",
    "num_layers=2\n",
    "lstm=LSTM(input_size,hidden_size)\n",
    "\n",
    "learning_rate=0.0001\n",
    "max_grad_norm=5\n",
    "loss_fn = nn.MSELoss()\n",
    "optimizer = optim.Adam(lstm.parameters(), lr=learning_rate,weight_decay=0.00001)\n",
    "\n",
    "batch_size = 8\n",
    "num_epochs = 30 #3\n",
    "# num_sequences = x_train_set.size(0)\n",
    "# num_batches = num_sequences //batch_size\n",
    "\n",
    "checkpoint_freq = 10\n",
    "path = './'\n",
    "\n",
    "train_losses=[]\n",
    "valid_losses=[]\n",
    "\n",
    "print(\"Training model for {} epoch\".format(num_epochs))\n",
    "for epoch in range(num_epochs):\n",
    "#     total_loss = 0\n",
    "\n",
    "    # Shuffle input and target sequences.\n",
    "    idx = torch.randperm(x_train_set.size(0))\n",
    "    x = x_train_set[idx]\n",
    "    y = y_train_set[idx]\n",
    "    \n",
    "    train_loss=train(lstm,x_train_set,y_train_set,optimizer,batch_size,epoch)\n",
    "    valid_loss=eval(lstm,x_valid_set,y_valid_set,optimizer,batch_size)\n",
    "    \n",
    "    train_losses.append(train_loss)\n",
    "    valid_losses.append(valid_loss)\n",
    "    \n",
    "    # Checkpoint\n",
    "    if epoch % checkpoint_freq ==0:\n",
    "        save_model(epoch, lstm, path)\n",
    "        \n",
    "# Last checkpoint\n",
    "save_model(num_epochs, lstm, path)\n",
    "    \n",
    "print(\"\\n\\n\\nOptimization ended.\\n\")\n",
    "\n",
    "plt.plot(train_losses, color=\"darkcyan\", label=\"train\")\n",
    "plt.plot(valid_losses, color=\"tomato\",label=\"validation\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "def predict_one_hour(model,x_valid_set,input_size,num_steps):\n",
    "    predictions=torch.zeros(num_steps)\n",
    "    for i, x in enumerate(x_valid_set):\n",
    "        hidden=model.init_hidden(1)\n",
    "        y_pred,_,_=model(x.contiguous().view(-1, 1, input_size),hidden)\n",
    "        predictions[i]=y_pred\n",
    "    return predictions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "one_step_predictions = predict_one_hour(lstm, x_valid_set, input_size, y_valid_set.size(0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(y_valid_set.data.numpy(),color='darkcyan')\n",
    "plt.plot(one_step_predictions.data.numpy(),color='tomato')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
